import moment from "moment";

const dateUtils = {
  /**
   * 获取当前日期
   * @param format
   * @returns {string}
   */
  getCurrentDate(format) {
    return moment().format(format);
  },
  parse(dateString) {
    return moment(dateString, 'YYYY-MM-DD HH:mm:ss').toDate();
  },
  /**
   * 格式化品项
   * @param date  要格式化的日期
   * @param format  格式化模板
   * @returns {string}
   */
  format(date, format) {
    return moment(date).format(format);
  },
  formatDate: date => {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? "0" + m : m;
    var d = date.getDate();
    d = d < 10 ? "0" + d : d;
    return y + "-" + m + "-" + d;
  },
  formatDateYearMonth: date => {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? "0" + m : m;
    return y + "-" + m;
  },

  //获取当前月的第一天
  getFirstDay(){
    //获取当前时间
    let date = new Date();
    //获取当前月的第一天
    date.setDate(1);
    return date;
  },
//获取当前月的最后一天
  getLastDay(){
    //获取当前时间
    let date = new Date();
    //获取当前月
    let currentMonth = date.getMonth();
    //获取到下一个月，++currentMonth表示本月+1，一元运算
    let nextMonth = ++currentMonth;
    //获取到下个月的第一天
    let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
    //一天时间的毫秒数
    let oneDay = 1000 * 60 * 60 * 24;
    //nextMonthFirstDay-oneDay表示下个月的第一天减一天时间的毫秒数就是本月的最后一天
    return new Date(moment(nextMonthFirstDay - oneDay).format("YYYY-MM-DD"));
  },

  
  getDateList: (start, end) => {
    var startTime = new Date(moment(start).format("YYYY-MM-DD"));
    var endTime = new Date(moment(end).format("YYYY-MM-DD"));
    var date_all = [],
      i = 0;
    while (endTime.getTime() - startTime.getTime() >= 0) {
      var year = startTime.getFullYear();
      var month =
        (startTime.getMonth() + 1).toString().length == 1
          ? "0" + (startTime.getMonth() + 1).toString()
          : (startTime.getMonth() + 1).toString();
      var day =
        startTime.getDate().toString().length == 1
          ? "0" + startTime.getDate()
          : startTime.getDate();
      date_all[i] = year + "-" + month + "-" + day;
      startTime.setDate(startTime.getDate() + 1);
      i += 1;
    }
    return date_all;
  },
  getFirstDay: () => {
    //获取当前时间
    let date = new Date();
    //获取当前月的第一天
    date.setDate(1);
    return date;
  },
  getLastDay: () => {
    //获取当前时间
    let date = new Date();
    //获取当前月
    let currentMonth = date.getMonth();
    //获取到下一个月，++currentMonth表示本月+1，一元运算
    let nextMonth = ++currentMonth;
    //获取到下个月的第一天
    let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
    //一天时间的毫秒数
    let oneDay = 1000 * 60 * 60 * 24;
    //nextMonthFirstDay-oneDay表示下个月的第一天减一天时间的毫秒数就是本月的最后一天
    return new Date(moment(nextMonthFirstDay - oneDay).format("YYYY-MM-DD"));
  },
  /*转换为分钟，h:小时（整数，可负值），m:分钟（整数，0-59）*/
  toMinute: (h, m) => {
    let f = h > 0 ? 1 : -1;
    return (Math.abs(h) * 60 + m * 1) * f;
  },
  /*转换为小时数，time 参数格式为'hh：mm'*/
  getHour: time => {
    return time.substr(0, time.indexOf(":"));
  },
  getMinute: time => {
    return time.substr(time.indexOf(":") + 1, time.length);
  },
  getTimesByChar: str => {
    var index = str.indexOf("f"); // 字符出现的位置
    var num = 0; // 这个字符出现的次数
    while (index !== -1) {
      console.log(index); // 打印字符串出现的位置
      num++; // 每出现一次 次数加一
      index = str.indexOf("f", index + 1); // 从字符串出现的位置的下一位置开始继续查找
    }
    return num;
  },
  getDayTime: str => {
    let date = new Date();
    let times = date.getTime();
    let hour = date.getHours();
    let minute = date.getMinutes();
    let second = date.getSeconds();
    let dayTime =
      times - hour * 3600 * 1000 - minute * 60 * 1000 - second * 1000;
    return dayTime;
  },
    /*获取年月集合对象*/
  getYearMonthObj(num) {
      //num为从当前月到num个月之前的yyyy-MM格式字符串对象
      //获取当前时间
      let date = new Date();
      date.setDate(1);
      let returnData = [];
      returnData.push({
          value: moment(date).format("YYYY-MM"),
          text: moment(date).format("YYYY-MM")
      });
      //获取当前月
      for (var i = 1; i < num; i++) {
          date.setMonth(date.getMonth() - 1);
          returnData.push({
              value: moment(date).format("YYYY-MM"),
              text: moment(date).format("YYYY-MM")
          });
      }
      return returnData;
  },
  /*获取年份集合对象*/
  getYearObj(num) {
      //num为从当前月到num个月之前的yyyy-MM格式字符串对象
      //获取当前时间
      let date = new Date();
      date.setDate(1);
      let returnData = [];
      returnData.push({
          value: moment(date).format("YYYY"),
          text: moment(date).format("YYYY")
      });
      //获取当前月
      for (var i = 1; i < num; i++) {
          date.setMonth(date.getMonth() - 12);
          returnData.push({
              value: moment(date).format("YYYY"),
              text: moment(date).format("YYYY")
          });
      }
      return returnData;
  },
    //将分钟数转换为HH：MM
    toHourMinute(num){
      let hmStr = '';
      if(num>=0){
          hmStr+=parseInt(num/60)>9?parseInt(num/60):'0'+parseInt(num/60);
          hmStr+=':';
          hmStr+=num%60>9?num%60:'0'+num%60;
      }
      return hmStr;
},
  //根据年月求第一天与最后一天
  getMonthFirstLastDay(yearMonth){
    let year = yearMonth.split("-")[0];
    let month = yearMonth.split("-")[1];
    let firstDay=new Date(year,month-1,1);//这个月的第一天
    let currentMonth=firstDay.getMonth(); //取得月份数
    let nextMonthFirstDay=new Date(firstDay.getFullYear(),currentMonth+1,1);//加1获取下个月第一天
    let dis=nextMonthFirstDay.getTime()-24*60*60*1000;//减去一天就是这个月的最后一天
    let lastDay=new Date(dis);
    firstDay=moment(firstDay).format("YYYY-MM-DD");//格式化 //这个格式化方法要用你们自己的，也可以用本文已经贴出来的下面的Format
    lastDay=moment(lastDay).format("YYYY-MM-DD");//格式化
    return [firstDay,lastDay];
},
};

export default dateUtils;
